Link to this headingMLS Protocol
- Allows a group of clients to exchange messages securely.
- Derives Secrets only known to the clients with forward-secrecy and post-compromise security
Link to this headingSetting up a Chat
Setting up Init:
sequenceDiagram
participant A
participant B
participant C
participant Directory
participant Group Channel
A->>Directory: KeyPackageA
B->>Directory: KeyPackageB
C->>Directory: KeyPackageC
Link to this headingAdding a Member
Adding 2 new Users to chat:
Group
A B C Directory Channel
| | | | |
| KeyPackageB, KeyPackageC | |
|<-------------------------------------------| |
|state.init() | | | |
| | | | |
| | | | Add(A->AB) |
| | | | Commit(Add) |
|--------------------------------------------------------------->|
| | | | |
| Welcome(B) | | | |
|------------->|state.join() | | |
| | | | |
| | | | Add(A->AB) |
| | | | Commit(Add) |
|<---------------------------------------------------------------|
|state.add(B) | | | |
| | | | |
| | | | |
| | | | Add(AB->ABC) |
| | | | Commit(Add) |
|--------------------------------------------------------------->|
| | | | |
| | Welcome(C) | | |
|---------------------------->|state.join() | |
| | | | |
| | | | Add(AB->ABC) |
| | | | Commit(Add) |
|<---------------------------------------------------------------|
|state.add(C) |<------------------------------------------------|
| |state.add(C) | | |
| | | | |
Link to this headingUpdating a Leaf Secret
User B Updating a Key:
Group
A B ... Z Directory Channel
| | | | |
| | Update(B) | | |
| |------------------------------------------->|
| Commit(Upd) | | | |
|---------------------------------------------------------->|
| | | | |
| | | | Update(B) |
| | | | Commit(Upd) |
|<----------------------------------------------------------|
|state.upd(B) |<-------------------------------------------|
| |state.upd(B) |<----------------------------|
| | |state.upd(B) | |
| | | | |
Link to this headingRemoving a Member
Removing a User from a Group:
Group
A B ... Z Directory Channel
| | | | |
| | | Remove(B) | |
| | | Commit(Rem) | |
| | |---------------------------->|
| | | | |
| | | | Remove(B) |
| | | | Commit(Rem) |
|<----------------------------------------------------------|
|state.rem(B) | |<----------------------------|
| | |state.rem(B) | |
| | | | |
| | | | |